# 数据类型
# 整数-可以处理任意大小的整数，当然包括负整数，在程序中的表示方法和数学上的写法一模一样
# 浮点数-浮点数也就是小数
# 字符串-字符串是以单引号'或双引号"括起来的任意文本，比如'abc'，"xyz"等等。
# 请注意，''或""本身只是一种表示方式，不是字符串的一部分，因此，字符串'abc'只有a，b，c这3个字符。
# 如果'本身也是一个字符，那就可以用""括起来，比如"I'm OK"包含的字符是I，'，m，空格，O，K这6个字符。


# 字符串内部既包含'又包含"怎么办？可以用转义字符\来标识
print("转义符##################################################start")
print('I\'m\"OK!\"')
print("I'm\"OK!\"")
# \n表示换行，\t表示制表符，字符\本身也要转义，所以\\表示的字符就是\
print("\\\n\\")
print("转义符##################################################end\n")

print("转义符失效与换行简写##################################################start")
# Python还允许用r""表示"" or  r''标识''  内部的字符串默认不转义
print(r"\\\n\\")
# 用\n写在一行里不好阅读，为了简化，Python允许用'''...'''的格式表示多行内容
print('''linex 
linex2 
linex3''')
print('linex '
      'linex2 '
      'linex3')
# 多行字符串'''...'''还可以在前面加上r使用
print(r'''hello,\n
world''')
print('''hello,\n
world''')
print("转义符失效与换行简写##################################################end\n")


print("布尔类型##################################################start")
# 布尔类型
print(True)
print(False)
print(2 < 1)
print(2 > 1)
# and运算是与运算，只有所有都为True，and运算结果才是True
print(True and True)
print(True and False)
print(1 == 1 and 1 < 2)
print(1 != 1 and 1 < 2)
# or运算是或运算，只要其中有一个为True，or运算结果就是True
print(True or True)
print(False or True)
print(1 == 1 or 1 > 2)
print(1 != 1 or 1 < 2)
# not运算是非运算，它是一个单目运算符，把True变成False，False变成True
print(not True)
print(not False)
print(not 1 == 1 and 1 < 2)
print(not not 1 > 2)
# if判断是使用布尔类型
if 100 > 50:
    print("100比50大")
else:
    print("50比100大")

print("布尔类型##################################################end\n")

print("变量##################################################start")
# python的变量是动态语言
a = 123  # a是整数
print(a)
a = 'ABC'  # a变为字符串
print(a)
a = 1.5  # a变为浮点型
print(a)
a = True  # a为布尔类型
print(a)
x = 10
x = x + 2
print(x)

# 1.执行a = 'ABC'，解释器创建了字符串'ABC'和变量a，并把a指向'ABC'
# 2.执行b = a，解释器创建了变量b，并把b指向a指向的字符串'ABC'
# 3.执行a = 'XYZ'，解释器创建了字符串'XYZ'，并把a的指向改为'XYZ'，但b并没有更改
a = 'ABC'
b = a
a = 'XYZ'
print(b)
print("变量##################################################end\n")

print("常量##################################################start")
# 在Python中，通常用全部大写的变量名表示常量
# 但事实上PI仍然是一个变量，Python根本没有任何机制保证PI不会被改变，
# 所以，用全部大写的变量名表示常量只是一个习惯上的用法，如果你一定要改变变量PI的值，也没人能拦住你
PI = 3.14159265359
print(PI)
print("常量##################################################end\n")

print("除法##################################################start")
# /除法计算结果是浮点数，即使是两个整数恰好整除，结果也是浮点数
avg = 10 / 5
print(avg)
# 还有一种除法是//，称为地板除，两个整数的除法仍然是整数
avg = 10 // 5
# 余数运算 无论整数做//除法还是取余数，结果永远是整数
print(avg)
avg = 10 % 3
print(avg)
print("除法##################################################end\n")

print("请打印出以下变量的值##################################################start")
n = 123
f = 456.789
s1 = 'Hello, world'
s2 = 'Hello, \'Adam\''
s3 = r'Hello, "Bart"'
s4 = r'''Hello,
Lisa!'''
print(n)
print(f)
print(s1)
print(s2)
print(s3)
print(s4)
print("请打印出以下变量的值##################################################end\n")